package com.zk.lock.lock1;

public enum ZkCreateMode {

	/**
	 * 持久节点，节点创建后，会一直存在，不会因为客户端会话失效而删除
	 */
	PERSISTENT(0, false, false),
	/**
	 * 持久顺序节点，基本特性与持久节点一致，创建节点的过程中，zookeeper
	 * 
	 * 会在其名字后自动追加一个单调增长的数字作为新的节点名
	 */
	PERSISTENT_SEQUENTIAL(2, false, true),

	/**
	 * 临时节点，客户端会话失效或连接关闭后，该节点会被自动删除，且不能在临时节点下面创建子节点
	 */
	EPHEMERAL(1, true, false),

	/**
	 * 
	 * 临时顺序节点:基本特性与临时节点一致，创建节点的过程中，zookeeper会在其名字后自动追加一个单调增长的数字后缀
	 * 
	 */
	EPHEMERAL_SEQUENTIAL(3, true, true);

	ZkCreateMode(int flag, boolean ephemeral, boolean sequential) {
	}

	public static ZkCreateMode fromFlag(int flag) throws Exception {
		switch (flag) {

		case 0:
			return ZkCreateMode.PERSISTENT;
		case 2:
			return ZkCreateMode.PERSISTENT_SEQUENTIAL;
		case 3:
			return ZkCreateMode.EPHEMERAL_SEQUENTIAL;
		case 1:
			return ZkCreateMode.EPHEMERAL;
		default:
			throw new Exception("flag error");
		}
	}
}
